[レポート] Amazon CognitoとAmazon Verified Permissionsで実現する認可アーキテクチャについて #AWSreInvent
こんにちは、ゲーソルの新屋です。
re:Invent2024のセッションレポートをお届けします。
セッション情報
タイトル
- SEC346 | Customer insights on application authorization
セッションタイプ
- Breakout session
スピーカー
- Scot Glasford, Product Manager, FIS
- Julian Lovelock, Principal Product Manager Technical, Amazon
- Ana Kosutic, Software Engineer, FIS
- Con Tsalikis, Chief Technology Officer, Grosvenor Engineering Group
セッション概要
Authentication and authorization are foundational to protecting access to application APIs and data. AWS has heard from customers that developing and operating an integrated solution could be streamlined. Amazon Cognito and Amazon Verified Permissions provide application developers with fully managed services to store and validate user credentials and authorization rules expressed as Cedar policies. This session covers how FIS, a leading global technology solution provider in the regulated financial services industry, and Grosvenor Engineering Group, a trusted building services provider, used AWS to build integrated solutions. The session dives deep on the topics of policy design and integration architecture.
認証と認可は、アプリケーションAPIとデータへのアクセスを保護するための基盤である。AWSは、統合ソリューションの開発と運用を合理化できるという顧客の声を聞いてきた。Amazon CognitoとAmazon Verified Permissionsは、アプリケーション開発者にユーザー認証情報とCedarポリシーとして表現された認証ルールを保存し、検証するためのフルマネージドサービスを提供します。このセッションでは、規制された金融サービス業界をリードするグローバルテクノロジーソリューションプロバイダーであるFISと、信頼できるビルディングサービスプロバイダーであるGrosvenor Engineering Groupが、統合ソリューションを構築するためにAWSをどのように利用したかを取り上げます。このセッションでは、ポリシー設計と統合アーキテクチャのトピックについて深く掘り下げます。
内容
Amazon Verified Permissions(AVP)
- Amazon Verified Permissions(AVP)とAWS Cognitoを使用して、認証と認可を中央集約化する
- AVPは、RBAC(ロールベースアクセス制御)とABAC(属性ベースアクセス制御)を組み合わせた細かいアクセス制御を行う
- そのアクセス制御を定義するためにCedarポリシーという言語が使用される
Cedarポリシー
- CedarはAWSによって開発され、オープンソース化されたポリシー言語で、誰でも利用可能
- 上記のポリシーは、RBACとABACを組み合わせたポリシーの例
- 主治医が患者を照会したり、患者記録を更新できる
FIS Profitアプリケーションでの実装例
※FIS Profitはサービス名です
when {
principal.allowedRoleAttributes has "WorkspaceUser" &&
(
(
principal.allowedRoleAttributes["WorkspaceUser"] has "country" &&
principal.allowedRoleAttributes["WorkspaceUser"]["country"].contains("ALL")
) ||
(
resource.allowedAttributes has "country" &&
resource.allowedAttributes["country"].contains("ALL")
) ||
(
principal.allowedRoleAttributes["WorkspaceUser"] has "country" &&
resource.allowedAttributes has "country" &&
principal.allowedRoleAttributes["WorkspaceUser"]["country"].containsAny(resource.allowedAttributes["country"])
)
)
}
このようなCedarポリシーを定義すると…
- Spain属性を持っているWorkspace Userは
- ItalyとSpainの属性を持っているWorkspaceをアップデートできる
Amazon Cognitoとの統合
①API Gatewayで、カスタム属性に基づいてアクセス制御するパターン
②AVPからポリシーを取得してAmplifyアプリケーション上でアクセス制御するパターン
2つの構成の考察
①は、リクエストの都度AVPに問い合わせて認可するため、ポリシー評価はサーバーサイドで行われ、結果だけがフロントエンドに返る。
②は、ポリシーを取得してフロントエンドで動的に認可を行う。サーバーサイドの負荷は下がるが、ポリシー内容がフロントエンドに伝わってしまう(セキュリティ)
Amazon Cognitoのアップデート
Amazon Cognitoではアクセストークンにカスタム属性を付与できるようになったようです。例えば、ユーザーAは”custom:type”: “Cutomer”といった具合です。この機能のおかげで、上記の①の構成が取れるんですね。
感想
Amazon CognitoとAmazon Verified Permissions + Cedarの基本的な構成を学ぶことが出来ました。AVPは、Congnitoだけじゃなく他のIDプロバイダーとも統合できるようなので、Auth0などで試してみたいと思います。